<template>
  <template v-for="menu in menuData" :key="menu.id">
    <!-- 有子菜单的情况 -->
    <el-sub-menu v-if="menu.hasChildren && menu.children && menu.children.length > 0" :index="menu.code">
      <template #title>
        <el-icon v-if="menu.icon">
          <component :is="getIconComponent(menu.icon)" />
        </el-icon>
        <span>{{ menu.name }}</span>
      </template>
      
      <!-- 递归渲染子菜单 -->
      <DynamicMenu :menu-data="menu.children" @menu-click="handleMenuClick" />
    </el-sub-menu>
    
    <!-- 没有子菜单的情况 -->
    <el-menu-item v-else :index="menu.code" @click="handleMenuClick(menu)">
      <el-icon v-if="menu.icon">
        <component :is="getIconComponent(menu.icon)" />
      </el-icon>
      <template #title>{{ menu.name }}</template>
    </el-menu-item>
  </template>
</template>

<script setup>
import { defineEmits } from 'vue'
import { getIconComponent } from '@/utils/iconMap'

// 定义props
const props = defineProps({
  menuData: {
    type: Array,
    default: () => []
  }
})

// 定义事件
const emit = defineEmits(['menu-click'])

// 处理菜单点击
const handleMenuClick = (menu) => {
  emit('menu-click', menu)
}
</script>